//
// Created by MikeChen on 2025/3/28.
// 算数表达式
//


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    /*
        算术表达式：用算数运算符和括号将运算对象（操作数）连接起来的
        符合C语法规则的式子，就称为C语言算数表达式。
            运算对象包括常量 变量 函数等
            C语言规定了运算符的优先级和结合性
                优先级与数学运算符的优先级和结合性类似，
                即乘除优先于加减，结合方向时从左到右，
                同一优先级的运算符，按结合性一次执行

        不同类型数据间的混合运算：
            在程序运行中，经常会遇到不同类型的数据进行运算
            如：6+8.8 如果一个运算符的两侧数据类型不同，则先自动进行类型转换，使得二者具有同一种类型，然后进行运算，
            1.如果其中有一个数为float或double,结果是double类型，因为系统将所有的float类型数据都先转换为double类型，然后进行运算
            2.如果是int类型与float或double运算,也是先转换为double类型，然后进行运算，结果为double
            3.字符型（char）数据可以直接与整型数据进行运算，就是把字符的ASCII码值与整型数据进行运算
                如：10+‘A’= 75 // 'A'的ASCII码为65
                字符型数据与浮点类型运算，会先转换为double类型再运算
            4.整型与无符号整型之间运算，以无符号整型为准，先把int类型数据转化为无符号类型，然后做运算

    */

    int a = 1, b = 2, c = 3, d = 4;

    printf("%d\n", a * b - 6 / c + d);

    printf("%d\n", (a * b - 1) / c + d);

    //不同类型的运算
    printf("%lu\n", sizeof(0.618 + d));//8(即表明默认是double类型)
    printf("%lf\n", 0.618 + d);//4.618000

    float p = 3.14;
    printf("%d\n", sizeof(p + 0.618 + d));//8(即表明默认是double类型)
    printf("%lf\n", p + 0.618 + d);//7.758000
    //sizeof的返回类型是 unsigned long

    char ch = 'A';
    printf("结果：%d\n",ch+d);//结果：69
    printf("结果：%lf\n",ch+p);//结果：68.139999
    printf("结果：%0.2lf\n",ch+p);//结果：68.14

    unsigned int x = 50;
    int y = -5;
    x = x+y;
    printf("%d\n",x);//45

    /*
        强制类型转换运算符
            C语言可以运用强制类型转换运算符将一个表达式转换成所需的类型
            强制类型转换的一般格式：(类型名)(表达式)
            注意表达式应该用括号括起来
            如果写成：(int)x+y,则只是将x转换成整型，然后再与y相加
            (int)(x+y)可以将表达式x+y的值转换为整型，强转的值知识临时之，不对数据本身操作
     * */

    printf("%f\n",(float)(5%3));//2.000000



    system("read -rsp $'Press enter to continue...\\n'");
    return EXIT_SUCCESS;
}